#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "aboutdialog.h"
#include "finddialog.h"
#include "gotodialog.h"
#include "replacedialog.h"
#include <QDebug>
#include <QDesktopServices>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QFile>
#include <QFileDialog>
#include <QFontDialog>
#include <QLabel>
#include <QMainWindow>
#include <QMessageBox>
#include <QMimeData>
#include <QPageSetupDialog>
#include <QPrintDialog>
#include <QPrinter>
#include <QProcess>
#include <QPushButton>
#include <QScreen>
#include <QSettings>
#include <QTextBlock>

QT_BEGIN_NAMESPACE
namespace Ui
{
    class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void ReplaceCharacter(QString value, bool isChecked); //替换单个字符

private:
    Ui::MainWindow *ui;
    QString fileName;            //文件路径
    QString fileContent;         //文件内容
    QSettings *setting;          //配置文件
    QPrinter printer;            //打印机
    QLabel *ranks;               //光标所在的行列
    QLabel *zoom;                //缩放比例  百分比
    QLabel *newline;             //换行符类型
    QLabel *codeformat;          //编码格式
    bool autoLine;               //是否自动换行
    bool statusBar;              //是否显示状态栏
    FindDialog findDialog;       //查找对话框
    GoToDialog goToDialog;       //跳转对话框
    ReplaceDialog replaceDialog; //替换对话框

    void init();                     //初始化
    void conn();                     //连接信号与槽
    void saveTextToFile();           //保存文本框文本到文件
    void readFileToText();           //读取文件文本到文本框
    void showMessage(QString value); //打印找不到的内容

protected:
    //事件
    void dragEnterEvent(QDragEnterEvent *event); //拖动文件进入窗口
    void dropEvent(QDropEvent *event);           //释放对方时，执行的操作
    void closeEvent(QCloseEvent *event);         //关闭事件
    void wheelEvent(QWheelEvent *e);             //滚轮事件

signals:
    void sendData(int value); //给GotoDialog传递光标所在行号

private slots:
    void textChangedSlot();                                                                                   //文本变化
    void selectionChangedSlot();                                                                              //文本选中
    void cursorChangeSlot();                                                                                  //行列变化
    void FindTextSlot(QString value, bool isChecked1, bool isChecked2, bool isUp);                            //真·查找
    void FindTextforReplaceSlot(QString value, bool isChecked1, bool isChecked2);                             //真·查找(为了替换)
    void ReplaceTextSlot(QString target, QString value, bool isChecked1, bool isChecked2, bool isReplaceAll); //真·替换或者全替换
    void goToLineSlot(QString line);                                                                          //真·跳转

    //文件菜单槽函数
    void newFileSlot();       //新建
    void newFileWindowSlot(); //新窗口
    void openFileSlot();      //打开
    void saveFileSlot();      //保存
    void saveOtherFileSlot(); //另存为
    void PageSettingSlot();   //页面设置
    void doPrintSlot();       //打印
    void exitAppSlot();       //退出

    //编辑菜单槽函数
    void undoSolt();        //撤销
    void cutSolt();         //剪切
    void copySolt();        //复制
    void pasteSolt();       //粘贴
    void deleteSolt();      //删除
    void bingSolt();        //使用Bing搜索
    void findSlot();        //查找
    void findNextSlot();    //查找下一个
    void findLastSlot();    //查找上一个
    void replaceSlot();     //替换
    void goToSlot();        //转到
    void selectAllSlot();   //全选
    void timeAndDateSlot(); //时间或者日期

    //格式菜单槽函数
    void autoLineSlot();   //自动换行
    void fontChooseSlot(); //字体选择

    //查看菜单槽函数
    void ZoomInSlot();      //放大
    void ZoomOutSlot();     //缩小
    void ZoomDefaultSlot(); //恢复默认大小
    void statusBarSlot();   //状态栏

    //帮助菜单槽函数
    void helpSlot();     //帮助
    void FeedBackSlot(); //发送反馈
    void aboutSlot();    //关于
};
#endif // MAINWINDOW_H
